home *** CD-ROM | disk | FTP | other *** search
/ Aminet 32 / Aminet 32 (1999)(Schatztruhe)[!][Aug 1999].iso / Aminet / util / libs / graphics3d.lha / doc / graphics3d_I.doc < prev    next >
Encoding:
Text File  |  1999-05-09  |  58.4 KB  |  1,840 lines

  1. TABLE OF CONTENTS
  2.  
  3. graphics3d.library/GD_switch_rp
  4. graphics3d.library/GD_clipbox
  5. graphics3d.library/GD_over
  6. graphics3d.library/GD_display3d
  7. graphics3d.library/GD_close_display3d
  8. graphics3d.library/GD_changeviewmode
  9. graphics3d.library/GD_changeviewmodeobj
  10. graphics3d.library/GD_touchpalette
  11. graphics3d.library/GD_moveforward
  12. graphics3d.library/GD_viewangle
  13. graphics3d.library/GD_frustum
  14. graphics3d.library/GD_createlightsource
  15. graphics3d.library/GD_ambientlight
  16. graphics3d.library/GD_positioncamera
  17. graphics3d.library/GD_aspectratio
  18. graphics3d.library/GD_clipmode
  19. graphics3d.library/GD_newobj
  20. graphics3d.library/GD_deleteobject
  21. graphics3d.library/GD_addobjvertex
  22. graphics3d.library/GD_addobjpoly
  23. graphics3d.library/GD_cattpoly
  24. graphics3d.library/GD_setobj
  25. graphics3d.library/GD_getobj
  26. graphics3d.library/GD_translateobject
  27. graphics3d.library/GD_positionobject
  28. graphics3d.library/GD_scaleobject
  29. graphics3d.library/GD_rotateobject
  30. graphics3d.library/GD_pickobj
  31. graphics3d.library/GD_paintframe
  32. graphics3d.library/GD_newview
  33. graphics3d.library/GD_recalcobj
  34. graphics3d.library/GD_cascene
  35. graphics3d.library/GD_int2fix
  36. graphics3d.library/GD_sfl2fix
  37. graphics3d.library/GD_dfl2fix
  38. graphics3d.library/GD_fix2int
  39. graphics3d.library/GD_fix2sfl
  40. graphics3d.library/GD_fix2dfl
  41. graphics3d.library/GD_loadobject
  42. graphics3d.library/GD_genpalette
  43. graphics3d.library/GD_modpoly
  44. graphics3d.library/GD_newtmap
  45. graphics3d.library/GD_rmtmap
  46. graphics3d.library/GD_newtmapf
  47. graphics3d.library/GD_colldetect
  48. graphics3d.library/GD_modobj
  49.  
  50. graphics3d.library/GD_display3d                graphics3d.library/GD_display3d
  51.    NAME
  52.     GD_display3d  --  Inizializza tutto l'ambiente necessario per la libreria.
  53.    
  54.    SYNOPSIS
  55.     ambient3d=GD_display3d(win, x0, y0, scrw, scrh, vdist)
  56.                            A0   D0  D1  D2    D3    D4
  57.     struct ambient3d *GD_display3d(struct Window*,LONG,LONG,LONG,LONG,LONG);
  58.  
  59.    FUNCTION
  60.     Crea ed inizializza la struttura ambient3d che serve da descrittore 
  61.     della scena 3d ed e' usata come input da TUTTE le altre.
  62.  
  63.    INPUTS
  64.     win   = puntatore a struttura Window della finestra su cui si vuol 
  65.         visualizzare la scena 3d.
  66.     x0,y0 = coordinate vertice in alto a sinistra del box che definisce
  67.         i limiti di visualizzazione della scena.
  68.     scrw  = larghezza di tale box (deve essere multiplo di 16) max.3000.
  69.         E' anche usato come massimo valore X per il box di visualizzazione.
  70.     scrh  = altezza di tale box max.3000.
  71.         E' anche usato come massimo valore Y per il box di visualizzazione.
  72.     vdist = distanza tra osservatore e piano di proiezione scena 3d va
  73.         espresso come intero.
  74.  
  75.    RESULT
  76.     ambient3d = puntatore a struttura ambient3d se uguale a 0 allora
  77.             si e' verificato un errore e l'inizializzazione e'
  78.             fallita.
  79.  
  80.    BUGS
  81.     nessuno noto, se ne trovate segnalatemeli.
  82.  
  83.    NOTES
  84.     questa funzione va sempre usata PRIMA di poter usare tutte le altre.
  85.     Pero' e' possibile usarla piu' volte all'interno dello stesso 
  86.     programma e memorizzandone separatamente i risultati, si puo' agire
  87.     contemporaneamente e indipendentemente su tutte le scene cosi 
  88.     definite.
  89.     In futuro, forse rendero' possibile creare piu' scene indipendenti
  90.     dello stesso spazio 3D (ad esempio per creare piu' viste) mantenendo
  91.     comuni le aree di memoria per gestire gli oggetti. Adesso si rialloca
  92.     sempre tutte le aree e se gli oggetti sono molti o complessi la
  93.     memoria usata e' parecchia.    
  94.  
  95.    SEE ALSO
  96.     GD_close_display3d
  97.  
  98. graphics3d.library/GD_close_display3d            graphics3d.library/GD_close_display3d
  99.    NAME
  100.     GD_close_display3d  --  elimina tutto cio' che riguarda la scena 3d visualizzata.
  101.  
  102.    SYNOPSIS
  103.     GD_close_display3d(in)
  104.                        A0
  105.     void GD_close_display3d(struct ambient3d *);
  106.  
  107.    FUNCTION
  108.     elimina tutto cio' che era stato aperto e definito con GD_display3d
  109.     inclusi tutti gli eventuali oggetti inseriti in quella scena.
  110.  
  111.    INPUTS
  112.     in = puntatore a struttura ambient3d che si vuol eliminare.
  113.          Se questo puntatore e' 0 allora non fa nulla.
  114.  
  115.    RESULT
  116.  
  117.    BUGS
  118.     nessuno noto, se ne trovate segnalatemeli.
  119.  
  120.    NOTES
  121.     da usarsi tipicamente al termine del programma per eliminare tutto
  122.     quello che riguarda questa libreria.
  123.  
  124.    SEE ALSO
  125.     GD_display3d
  126.  
  127. graphics3d.library/GD_changeviewmode            graphics3d.library/GD_changeviewmode
  128.    NAME
  129.     GD_changeviewmode  --  cambia il modo di visualizzare tutti gli oggetti
  130.  
  131.    SYNOPSIS
  132.     esi=GD_changeviewmode(in, modo, b_col)
  133.                           A0  D0    D1
  134.     LONG GD_changeviewmode(struct ambient3d *,LONG,LONG);
  135.  
  136.    FUNCTION
  137.     cambia in una volta sola il modo di visualizzazione di tutti gli
  138.     oggetti definiti nella scena3d, per adesso si puo' visualizzare
  139.     in wire frame , solid e flat.
  140.  
  141.    INPUTS
  142.     in    = puntatore a struttura ambient3d della scena 3d su cui 
  143.         operare.
  144.         Deve essere maggiore di 0 altrimenti esito indefinito. 
  145.     modo  = nuovo modo di visualizzazione : vedi GD_modobj().
  146.         b_col = n# registro colore da usare per il bordo dei poligoni 
  147.         degli oggetti.
  148.  
  149.    RESULT
  150.     esi = esito operazione , se diverso da 0 tutto ok altrimenti errore
  151.           operazione non eseguita.
  152.  
  153.    BUGS
  154.     nessuno noto, se ne trovate segnalatemeli.
  155.  
  156.    NOTES
  157.  
  158.    SEE ALSO
  159.     GD_changeviewmodeobj
  160.  
  161. graphics3d.library/GD_changeviewmodeobj            graphics3d.library/GD_changeviewmodeobj
  162.  
  163.        OBSOLETA - usare GD_modobj() .
  164.  
  165.    NAME
  166.     GD_changeviewmodeobj  --  cambia il modo di visualizzare dell'oggetto selezionato 
  167.  
  168.    SYNOPSIS
  169.     esi=GD_changeviewmodeobj(in, modo)
  170.                              A0  D0  
  171.     LONG GD_changeviewmodeobj(struct ambient3d *,LONG);
  172.  
  173.    FUNCTION
  174.     cambia il modo di visualizzazione dell'oggetto attualmente 
  175.     selezionato nella scena 3d considerata.
  176.  
  177.    INPUTS
  178.     in    = puntatore a struttura ambient3d della scena 3d su cui 
  179.         operare.
  180.         Deve essere maggiore di 0 altrimenti esito indefinito. 
  181.     modo  = nuovo modo di visualizzazione :
  182.         0 -> wireframe          (usare la macro WIREF) 
  183.         1 -> ombreggiatura flat (usare la macro FLAT)
  184.         2 -> solido             (usare la macro SOLID)
  185.         3 -> sfumato (goraud)    (usare la macro GORAUD)
  186.  
  187.    RESULT
  188.     esi = esito operazione , se diverso da 0 tutto ok altrimenti errore
  189.           operazione non eseguita.
  190.  
  191.    BUGS
  192.     in realta' non e' stata ancora testata ma dovrebbe funzionare. 
  193.  
  194.    NOTES
  195.  
  196.    SEE ALSO
  197.     GD_changeviewmode
  198.  
  199. graphics3d.library/GD_touchpalette            graphics3d.library/GD_touchpalette
  200.    NAME
  201.     GD_touchpalette  --  crea una palette sfumata di colori
  202.  
  203.    SYNOPSIS
  204.     GD_touchpalette(in, fr, lr, init_color, lastcolor)
  205.                     A0  D0  D1  A1          A2 
  206.     void GD_touchpalette(struct ambient3d *,LONG,LONG,struct rgbtype *,struct rgbtype *);
  207.  
  208.    FUNCTION
  209.     crea una palette sfumata tra due registri colore im modo da poter
  210.     usare correttamente il modo di visualizzazione flat shading.
  211.     
  212.    INPUTS
  213.     in         = puntatore a struttura ambient3d della scena 3d su cui 
  214.              operare.
  215.              Deve essere maggiore di 0 altrimenti esito indefinito. 
  216.     fr         = primo registro colore da settare.
  217.         lr         = ultimo registro colore da settare.
  218.     init_color = puntatore a struttura rgbtype con valore RGB iniziale
  219.              del colore.
  220.     lastcolor  = puntatore a struttura rgbtype con valore RGB iniziale
  221.              del colore.
  222.  
  223.    RESULT
  224.  
  225.    BUGS
  226.     nessuno noto, se ne trovate segnalatemeli.
  227.  
  228.    NOTES
  229.     tenete presente che il colore che si assegna all'oggetto sara' usato
  230.     come riferimento a fr dal flat shading e sara' la sfumatura piu' 
  231.     scura ,lr la piu' chiara.
  232.     Va usata sempre poiche' il solid shading usa la sfumatura centrale
  233.     come colore di visualizzazione dei poligoni, usando il colore 
  234.     dell'oggetto come riferimento a fr.
  235.     Ora ci sono 2 campi di valori per RGB init_color e RGB last color :
  236.     1- la componente RGB e' nel campo tra 0 e 15 quindi si puo' usare
  237.        con macchine con il chipset ECS e S.O. <3.0 .
  238.     2- la componente RGB e' nel campo tra 0 e 255 allora si DEVE usare
  239.        con macchine con almeno il chipset AGA e S.O. >=3.0 .
  240.  
  241.    SEE ALSO
  242.  
  243. graphics3d.library/GD_moveforward            graphics3d.library/GD_moveforward
  244.    NAME
  245.     GD_moveforward  --  sposta l'osservatore
  246.  
  247.    SYNOPSIS
  248.     GD_moveforward(in, dist)
  249.                    A0  D0
  250.     void GD_moveforward(struct ambient3d *,LONG);
  251.  
  252.    FUNCTION
  253.     sposta l'osservatore di dist unita' nella direzione del punto di 
  254.     vista.
  255.  
  256.    INPUTS
  257.     in   = puntatore a struttura ambient3d della scena 3d su cui operare.
  258.            Deve essere maggiore di 0 altrimenti esito indefinito. 
  259.     dist = n# di unita' di spostamento osservatore, puo' essere negativo
  260.            (spostamento all'indietro) ma deve essere in FIX POINT ovvero:
  261.            valore intero * 256 (o meglio * FIXV) +
  262.            valore frazionario che sara' considerato in 256 esimi 
  263.            (o meglio in FIXV esimi).    
  264.  
  265.    RESULT
  266.  
  267.    BUGS
  268.     nessuno noto, se ne trovate segnalatemeli.
  269.  
  270.    NOTES
  271.     I valori in fix point sono cosi composti :
  272.     valore intero*moltiplicatore + valore frazionario.
  273.     dove moltiplicatore e' la posizione della virgola ed e' sempre
  274.     uguale ,in questa libreria e' = 256 (usare la macro FIXV).
  275.     es.: il numero in floating point 10.2 espresso in fix point sara' :
  276.         parte_intera * moltiplicatore +
  277.         moltiplicatore / inverso_parte_frazionaria
  278.         e cioe con moltiplicatore uguale a 256 (macro FIXV): 
  279.         (10 * 256) + (256 / (1/0.2)) = 2611
  280.     ovvero anche :
  281.         numero float * moltiplicatore -> 10.2 * 256 = 2611
  282.  
  283.    SEE ALSO
  284.     GD_viewangle, GD_positioncamera
  285.  
  286. graphics3d.library/GD_viewangle            graphics3d.library/GD_viewangle
  287.    NAME
  288.     GD_viewangle  --  gira l'osservatore
  289.  
  290.    SYNOPSIS
  291.     GD_viewangle(in ,ax ,ay ,az )
  292.                  A0  D0  D1  D2    
  293.     void GD_viewangle(struct ambient3d *,LONG,LONG,LONG);
  294.  
  295.    FUNCTION
  296.     permette di variare l'angolo di visuale dell'osservatore.
  297.  
  298.    INPUTS
  299.     in = puntatore a struttura ambient3d della scena 3d su cui operare.
  300.          Deve essere maggiore di 0 altrimenti esito indefinito. 
  301.     ax = valore rotazione su asse X osservatore.
  302.          Va espresso in valori interi (non fixpoint) ed e' considerato
  303.          in gradi sessagesimali (0-90-180-360).  
  304.     ay = valore rotazione su asse Y osservatore.
  305.          Va espresso in valori interi (non fixpoint) ed e' considerato
  306.          in gradi sessagesimali (0-90-180-360).  
  307.     az = valore rotazione su asse Z osservatore.
  308.          Va espresso in valori interi (non fixpoint) ed e' considerato
  309.          in gradi sessagesimali (0-90-180-360).  
  310.  
  311.    RESULT
  312.  
  313.    BUGS
  314.     nessuno noto, se ne trovate segnalatemeli.
  315.  
  316.    NOTES
  317.  
  318.    SEE ALSO
  319.     GD_moveforward, GD_positioncamera 
  320.  
  321. graphics3d.library/GD_frustum            graphics3d.library/GD_frustum
  322.    NAME
  323.     GD_frustum  --  setta i piani che delimitano lo spazio visibile
  324.  
  325.    SYNOPSIS
  326.     GD_frustum(in ,near ,far )
  327.                A0  D0    D1
  328.     void GD_frustum(struct ambient3d *,LONG,LONG);
  329.  
  330.    FUNCTION
  331.     setta la distanza sull'asse Z dell'osservatore dei piani ad esso 
  332.     perpendicolari e che ne delimitano il campo visivo.
  333.  
  334.    INPUTS
  335.     in   = puntatore a struttura ambient3d della scena 3d su cui operare.
  336.            Deve essere maggiore di 0 altrimenti esito indefinito. 
  337.     near = valore intero (non fixpoint) distanza piano che segnala 
  338.            inizio campo visivo dello spazio definito.
  339.     far  = valore intero (non fixpoint) distanza piano che segnala 
  340.            fine campo visivo dello spazio definito.
  341.     
  342.    RESULT
  343.  
  344.    BUGS
  345.     nessuno noto, se ne trovate segnalatemeli.
  346.  
  347.    NOTES
  348.  
  349.    SEE ALSO
  350.     GD_clipmode
  351.  
  352. graphics3d.library/GD_createlightsource            graphics3d.library/GD_createlightsource
  353.    NAME
  354.     GD_createlightsource  --  posiziona la fonte di luce nello spazio
  355.  
  356.    SYNOPSIS
  357.     GD_createlightsource(in ,x ,y ,z )
  358.                          A0  D0 D1 D2
  359.     void GD_createlightsource(struct ambient3d *,LONG,LONG,LONG);
  360.  
  361.    FUNCTION
  362.     crea e posiziona una fonte di luce nello spazio.
  363.  
  364.    INPUTS
  365.     in = puntatore a struttura ambient3d della scena 3d su cui operare.
  366.          Deve essere maggiore di 0 altrimenti esito indefinito. 
  367.     x  = coordinata X della luce rispetto all' origine dello spazio.
  368.          Valore espresso in fix point (vedi notes di GD_moveforward).
  369.     y  = coordinata Y della luce rispetto all' origine dello spazio.
  370.          Valore espresso in fix point (vedi notes di GD_moveforward).
  371.     z  = coordinata Z della luce rispetto all' origine dello spazio.
  372.          Valore espresso in fix point (vedi notes di GD_moveforward).
  373.  
  374.    RESULT
  375.  
  376.    BUGS
  377.     temo che non posizioni correttamente la luce, devo verificarla
  378.     meglio.
  379.  
  380.    NOTES
  381.     in realta' questa funzione posiziona soltanto una luce non la crea,
  382.     visto che se ne puo' avere solo una ed e' presente dal momento in
  383.     cui si usa GD_display3d questo perche' altrimenti il flat shading
  384.     non potrebbe funzionare subito.
  385.     In futuro puo' darsi che permetta di gestirne piu' di una e in tal
  386.     caso la creera anche .
  387.  
  388.    SEE ALSO
  389.     GD_ambientlight
  390.  
  391. graphics3d.library/GD_ambientlight            graphics3d.library/GD_ambientlight
  392.    NAME
  393.     GD_ambientlight  --  setta l'intensita' della luce ambientale
  394.  
  395.    SYNOPSIS
  396.     GD_ambientlight(in ,inte )
  397.                     A0  D0
  398.     void GD_ambientlight(struct ambient3d *,LONG);
  399.  
  400.    FUNCTION
  401.     setta l'intensita' della luce ambientale, non il colore .
  402.  
  403.    INPUTS
  404.     in   = puntatore a struttura ambient3d della scena 3d su cui operare.
  405.            Deve essere maggiore di 0 altrimenti esito indefinito. 
  406.     inte = valore intensita' luce espresso in fix point(vedi notes di 
  407.            GD_moveforward).
  408.  
  409.    RESULT
  410.  
  411.    BUGS
  412.  
  413.    NOTES
  414.     questa funzione in pratica ha effetto solo se si usa il flat shading
  415.     almeno per adesso.
  416.  
  417.    SEE ALSO
  418.     GD_createlightsource
  419.  
  420. graphics3d.library/GD_positioncamera            graphics3d.library/GD_positioncamera
  421.    NAME
  422.     GD_positioncamera  --  posiziona l'osservatore
  423.  
  424.    SYNOPSIS
  425.     GD_positioncamera(in ,x ,y ,z )
  426.                       A0  D0 D1 D2
  427.     void GD_positioncamera(struct ambient3d *,LONG,LONG,LONG);
  428.  
  429.    FUNCTION
  430.     posiziona l'osservatore rispetto all'origine dello spazio.
  431.  
  432.    INPUTS
  433.     in = puntatore a struttura ambient3d della scena 3d su cui operare.
  434.          Deve essere maggiore di 0 altrimenti esito indefinito. 
  435.     x  = coordinata X dell'osservatore rispetto all' origine dello 
  436.          spazio. 
  437.          Valore espresso in fix point (vedi notes di GD_moveforward).
  438.     y  = coordinata Y dell'osservatore rispetto all' origine dello 
  439.          spazio. 
  440.          Valore espresso in fix point (vedi notes di GD_moveforward).
  441.     z  = coordinata Z dell'osservatore rispetto all' origine dello 
  442.          spazio. 
  443.          Valore espresso in fix point (vedi notes di GD_moveforward).
  444.  
  445.    RESULT
  446.  
  447.    BUGS
  448.     nessuno noto, se ne trovate segnalatemeli.
  449.  
  450.    NOTES
  451.  
  452.    SEE ALSO
  453.     GD_moveforward, GD_viewangle
  454.  
  455. graphics3d.library/GD_aspectratio            graphics3d.library/GD_aspectratio
  456.    NAME
  457.     GD_aspectratio  --  varia aspect ratio
  458.  
  459.    SYNOPSIS
  460.     GD_aspectratio(in ,ratio )
  461.                    A0  D0
  462.     void GD_aspectratio(struct ambient3d *,LONG);
  463.  
  464.    FUNCTION
  465.     varia l'aspect ratio della scena visualizzata ,di default e' uguale
  466.     a 1:1.
  467.  
  468.    INPUTS
  469.     in    = puntatore a struttura ambient3d della scena 3d su cui 
  470.         operare. Deve essere maggiore di 0 altrimenti esito 
  471.         indefinito. 
  472.     ratio = valore nuovo aspect ratio cosi espresso, es.: se 1:2 allora 
  473.         e' uguale a 0.5.     
  474.             Valore espresso in fix point (vedi notes di GD_moveforward).
  475.         
  476.    RESULT
  477.  
  478.    BUGS
  479.     nessuno noto, se ne trovate segnalatemeli.
  480.  
  481.    NOTES
  482.  
  483.    SEE ALSO
  484.  
  485. graphics3d.library/GD_clipmode            graphics3d.library/GD_clipmode
  486.    NAME
  487.     GD_clipmode  --  setta un particolare clip mode
  488.  
  489.    SYNOPSIS
  490.     GD_clipmode(in ,mode )
  491.                 A0  D0
  492.     void GD_clipmode(struct ambient3d *,LONG);
  493.     
  494.    FUNCTION
  495.     setta il modo di clippaggio degli oggetti nello spazio, tra i due
  496.     disponibili :
  497.     ZETA PLANE : per clippare l'oggetto ne considera il bounding box
  498.              solo sull'asse Z rispetto ai piani near e far.
  499.     FRUSTUM    : per clippare l'oggetto ne considera il boundig box
  500.                  su tutti e 3 gli assi , la Z rispetto ai piani near e 
  501.              far, la X e la Y rispetto ai limiti massimi del box di 
  502.              visualizzazione.
  503.  
  504.    INPUTS
  505.     in   = puntatore a struttura ambient3d della scena 3d su cui operare.
  506.            Deve essere maggiore di 0 altrimenti esito indefinito. 
  507.     mode = valore intero nuovo clip mode :
  508.         0 - ZETA PLANE (usare macro ZPLANE)
  509.         1 - FRUSTUM    (usare macro FRUSTUM)    
  510.  
  511.    RESULT
  512.  
  513.    BUGS
  514.     nessuno noto, se ne trovate segnalatemeli.
  515.  
  516.    NOTES
  517.  
  518.    SEE ALSO
  519.     GD_frustum
  520.  
  521. graphics3d.library/GD_pickobj            graphics3d.library/GD_pickobj
  522.    NAME
  523.     GD_pickobj  --  dato un punto ne identifica poligono e oggetto
  524.  
  525.    SYNOPSIS
  526.     idobj=GD_pickobj(in ,np ,x ,y )
  527.                     A0  A1  D0 D1
  528.     LONG GD_pickobj(struct ambient3d *,LONG *,LONG,LONG);
  529.  
  530.    FUNCTION
  531.     dato un punto rispetto alla finestra di visualizzazione (2D quindi)
  532.     identifica all'interno di quale poligono e di quale oggetto si trova
  533.     tra quelli visibili in quel momento ,cioe se si tiene fisso il punto
  534.     ma si varia la vista puo' cambiare il risultato.
  535.  
  536.    INPUTS
  537.     in = puntatore a struttura ambient3d della scena 3d su cui operare.
  538.          Deve essere maggiore di 0 altrimenti esito indefinito. 
  539.     np = puntatore ad intero dove mettere n# poligono trovato.
  540.          Sara' un valore intero che parte da 0 ma avra senso solo se il
  541.          risultato e maggiore o uguale a 0.
  542.     x  = valore intero(non fix point) coordinata X rispetto alla finestra
  543.          di visualizzazione della scena 3d.
  544.     y  = valore intero(non fix point) coordinata Y rispetto alla finestra
  545.          di visualizzazione della scena 3d.
  546.  
  547.    RESULT
  548.     valore intero(non fix point) con identificativo univoco dell'oggetto
  549.     nel cui interno si trova il punto dato.
  550.     Se uguale a 0 il punto e' all'esterno di tutti gli oggetti
  551.     attualmente visibili.
  552.  
  553.    BUGS
  554.     non e' infallibile poiche' non trova tutti i punti all'interno di un
  555.     poligono.
  556.  
  557.    NOTES
  558.     l'algoritmo usato e' del tutto empirico per motivi di velocita' e
  559.     non riesce ad individuare tutti i punti all'interno di un poligono
  560.     ma sicuramente i punti che trova sono dentro il poligono segnalato.
  561.     Se qualcuno conosce algoritmi piu' affidabili e me li puo' spiegare
  562.     sara' il benvenuto.
  563.     Per informazione tale algoritmo deve poter individuare se un punto
  564.     e' o no all'interno di un triangolo o quadrangolo(questo non e' 
  565.     essenziale) ma deve farlo nel modo piu' veloce possibile, poiche'
  566.     puo' doverne esaminare a centinaia.
  567.  
  568.    SEE ALSO
  569.     GD_setobj, GD_getobj
  570.  
  571. graphics3d.library/GD_newobj            graphics3d.library/GD_newobj
  572.    NAME
  573.     GD_newobj  --  crea un nuovo oggetto
  574.  
  575.    SYNOPSIS
  576.     esi=GD_newobj(in ,name ,pol ,vert)
  577.                   A0  A2    D0   D1
  578.     LONG GD_newobj(struct ambient3d *,char *,LONG,LONG);
  579.  
  580.    FUNCTION
  581.     crea ed inizializza le aree di memoria per generare un nuovo oggetto
  582.     lo posiziona sull'origine degli assi dello spazio e lo fa diventare
  583.     l' attualmente selezionato.
  584.  
  585.    INPUTS
  586.     in   = puntatore a struttura ambient3d della scena 3d su cui operare.
  587.            Deve essere maggiore di 0 altrimenti esito indefinito. 
  588.     name = puntatore a stringa (terminata da 0x00) con nome oggetto.
  589.     pol  = valore intero indicante il n# totale di poligoni da assegnare
  590.            all'oggetto.
  591.     vert = valore intero indicante il n# totale di vertici da assegnare
  592.            all'oggetto.
  593.  
  594.    RESULT
  595.     se esi uguale a 0 operazione fallita, altrimenti tutto ok e il valore
  596.     ritornato e' l'identificativo (univoco) dell'oggetto creato.
  597.  
  598.    BUGS
  599.     nessuno noto, se ne trovate segnalatemeli.
  600.  
  601.    NOTES
  602.     ricordarsi che l'oggetto cosi' creato ha i vertici e i poligoni
  603.     indefiniti quindi vanno usate le funzioni GD_addobjvertex per
  604.     definirne i vertici e GD_addobjpoly e GD_cattpoly per definirne i i
  605.     poligoni e quindi GD_recalcobj per inizializzarne correttamente
  606.     tutti i valori interni.
  607.  
  608.    SEE ALSO
  609.     GD_deleteobject ,GD_addobjvertex ,GD_addobjpoly ,GD_recalcobj
  610.  
  611. graphics3d.library/GD_deleteobject            graphics3d.library/GD_deleteobject
  612.    NAME
  613.     GD_deleteobject  --  elimina un oggetto
  614.  
  615.    SYNOPSIS
  616.     GD_deleteobject(in)
  617.                     A0
  618.     void GD_deleteobject(struct ambient3d *);
  619.  
  620.    FUNCTION
  621.     elimina un oggetto e tutte le aree di memoria che lo riguardano
  622.     facendo diventare l'oggetto attuale il precedente, o se il primo
  623.     il successivo
  624.  
  625.    INPUTS
  626.     in = puntatore a struttura ambient3d della scena 3d su cui operare.
  627.          Deve essere maggiore di 0 altrimenti esito indefinito. 
  628.  
  629.    RESULT
  630.  
  631.    BUGS
  632.     nessuno noto, se ne trovate segnalatemeli.
  633.  
  634.    NOTES
  635.     se nessun oggetto definito allora termina senza fare nulla.
  636.  
  637.    SEE ALSO
  638.     GD_newobj
  639.  
  640. graphics3d.library/GD_addobjvertex            graphics3d.library/GD_addobjvertex
  641.    NAME
  642.     GD_addobjvertex  --  aggiunge un vertice all'oggetto corrente 
  643.  
  644.    SYNOPSIS
  645.     esi=GD_addobjvertex(in ,num ,x ,y ,z )
  646.                         A0  D0   D1 D2 D3
  647.     LONG GD_addobjvertex(struct ambient3d *,LONG,LONG,LONG,LONG);
  648.  
  649.    FUNCTION
  650.     inserisce un vertice nell'oggetto attualmente selezionato alla
  651.     posizione indicata da num.
  652.  
  653.    INPUTS
  654.     in  = puntatore a struttura ambient3d della scena 3d su cui operare.
  655.           Deve essere maggiore di 0 altrimenti esito indefinito. 
  656.     num = numero intero indicante quale vertice si sta inserendo.
  657.           (#1->num=0 , #2->num=1 , ....).
  658.     x   = valore intero coordinata X del vertice da inserire.
  659.           Valore espresso in fix point (vedi notes di GD_moveforward).
  660.     y   = valore intero coordinata Y del vertice da inserire.
  661.           Valore espresso in fix point (vedi notes di GD_moveforward).
  662.     z   = valore intero coordinata Z del vertice da inserire.
  663.           Valore espresso in fix point (vedi notes di GD_moveforward).
  664.  
  665.    RESULT
  666.     se esi maggiore di 0 allora tutto ok altrimenti inserimento fallito.
  667.  
  668.    BUGS
  669.     nessuno noto, se ne trovate segnalatemeli.
  670.     
  671.    NOTES
  672.     per il momento questa funzione piu' che inserire modifica il vertice,
  673.     dato che GD_newobj gia' crea tutti i vertici anche se con valori
  674.     fasulli.
  675.     In futuro pero' puo' darsi che li aggiunga effettivamente.
  676.  
  677.    SEE ALSO
  678.     GD_newobj, GD_deleteobject ,GD_addobjpoly
  679.  
  680. graphics3d.library/GD_addobjpoly            graphics3d.library/GD_addobjpoly
  681.    NAME
  682.     GD_addobjpoly  --  aggiunge un poligono all'oggetto corrente
  683.  
  684.    SYNOPSIS
  685.     esi=GD_addobjpoly(in ,num ,p1 ,p2 ,p3 ,p4 )
  686.                    A0  D0   D1  D2  D3  D4
  687.     LONG GD_addobjpoly(struct ambient3d *,LONG,LONG,LONG,LONG,LONG);
  688.  
  689.    FUNCTION
  690.     inserisce un poligono nell'oggetto attualmente selezionato alla
  691.     posizione indicata da num.
  692.     Per poligono si intende l'elenco dei tre o quattro vertici in senso
  693.     orario che ne compongono gli spigoli oppure uno o due vertici che
  694.     compongono il punto o la linea.
  695.  
  696.    INPUTS
  697.     in  = puntatore a struttura ambient3d della scena 3d su cui operare.
  698.           Deve essere maggiore di 0 altrimenti esito indefinito. 
  699.     num = numero intero indicante quale poligono si sta inserendo.
  700.           (#1->num=0 , #2->num=1 , ....).
  701.     p1  = numero indice #1 vertice poligono su elenco vertici oggetto.
  702.     p2  = numero indice #2 vertice poligono su elenco vertici oggetto.
  703.           In particolare se questo e' uguale a -1 allora poligono con
  704.           solo un punto ovvero disegna un solo punto. 
  705.     p3  = numero indice #3 vertice poligono su elenco vertici oggetto.
  706.           In particolare se questo e' uguale a -1 allora poligono con
  707.           solo due lati ovvero disegna un segmento.
  708.     p4  = numero indice #4 vertice poligono su elenco vertici oggetto.
  709.           In particolare se questo e' uguale a -1 allora poligono con
  710.           solo tre lati.
  711.  
  712.    RESULT
  713.     se esi maggiore di 0 allora tutto ok altrimenti inserimento fallito.
  714.     
  715.    BUGS
  716.     nessuno noto, se ne trovate segnalatemeli.
  717.  
  718.    NOTES
  719.     vale la stessa nota fatta per GD_addobjvertex, cioe' in realta non
  720.     si aggiunge un poligono ma si modifica uno gia' presente.
  721.     Almeno per ora in futuro chissa'.
  722.  
  723.    SEE ALSO
  724.     GD_newobj, GD_deleteobject ,GD_addobjvertex ,GD_cattpoly
  725.  
  726. graphics3d.library/GD_cattpoly            graphics3d.library/GD_cattpoly
  727.  
  728.     OBSOLETA -- usare la GD_modpoly() .
  729.  
  730.    NAME
  731.     GD_cattpoly  --  varia gli attributi di un poligono 
  732.  
  733.    SYNOPSIS
  734.     esi=GD_cattpoly(in ,num ,color ,twoside )
  735.                     A0  D0   D1     D2
  736.     LONG GD_cattpoly(struct ambient3d *,LONG,LONG,LONG);
  737.  
  738.    FUNCTION
  739.     modifica le caratteristiche del poligono alla posizione indicata da
  740.     num nell'oggetto attualmente selezionato.
  741.  
  742.    INPUTS
  743.     in      = puntatore a struttura ambient3d della scena 3d su cui 
  744.           operare. Deve essere maggiore di 0 altrimenti esito 
  745.           indefinito. 
  746.     num     = numero intero indicante quale poligono si sta variando.
  747.                 (#1->num=0 , #2->num=1 , ....).
  748.     color   = numero intero indicante il colore base per il poligono.
  749.           Per la visualizzazione tipo FLAT usera i colori successivi
  750.           a questo per sfumare su toni piu' chiari. 
  751.     twoside = numero intero indicante se poligono a 2 facce (1) o ad 1
  752.           faccia (0).
  753.           Se a 2 facce ovvero con faccia anteriore e posteriore,
  754.           risultera' sempre visibile. 
  755.           Se con 1 faccia allora sara' visibile solo se la faccia
  756.           che guarda all'esterno dell'oggetto sara' di fronte 
  757.           all'osservatore.
  758.           Questo e' un modo veloce per ridurre il n# di poligoni
  759.           presenti in una scena 3d.
  760.           Non e' considerato in caso di poligoni con meno di 
  761.           tre lati.
  762.  
  763.    RESULT
  764.     se esi maggiore di 0 allora tutto ok altrimenti modifica fallita.
  765.  
  766.    BUGS
  767.     nessuno noto, se ne trovate segnalatemeli.
  768.  
  769.    NOTES
  770.  
  771.    SEE ALSO
  772.     GD_addobjpoly
  773.  
  774. graphics3d.library/GD_recalcobj            graphics3d.library/GD_recalcobj
  775.    NAME
  776.     GD_recalcobj  --  ricalcola i parametri fissi dell'oggetto
  777.  
  778.    SYNOPSIS
  779.     GD_recalcobj(in )
  780.                  A0
  781.     void GD_recalcobj(struct ambient3d *);
  782.  
  783.    FUNCTION
  784.     ricalcola alcuni parametri normalmente non variabili dell'oggetto
  785.     attualmente selezionato (come il bounding box) va richiamata solo 
  786.     se si varia le coordinate di uno o piu' vertici .
  787.  
  788.    INPUTS
  789.     in   = puntatore a struttura ambient3d della scena 3d su cui operare.
  790.            Deve essere maggiore di 0 altrimenti esito indefinito. 
  791.  
  792.    RESULT
  793.     
  794.    BUGS
  795.     nessuno noto, se ne trovate segnalatemeli.
  796.  
  797.    NOTES
  798.     questa funzione deve essere sempre usata dopo il termine della 
  799.     definizione completa di un nuovo oggetto.
  800.     Ovvero dopo l'uso di GD_newobj,GD_addobjvertex,GD_addobjpoly.
  801.     
  802.    SEE ALSO
  803.     GD_newobj ,GD_addobjvertex ,GD_addobjpoly 
  804.  
  805. graphics3d.library/GD_setobj            graphics3d.library/GD_setobj
  806.    NAME
  807.     GD_setobj  --  setta come attualmente selezionato un oggetto
  808.  
  809.    SYNOPSIS
  810.     esi=GD_setobj(in ,num )
  811.                   A0  D0
  812.     LONG GD_setobj(struct ambient3d *,LONG);
  813.  
  814.    FUNCTION
  815.     fa diventare oggetto attualmente selezionato quello che ha come
  816.     identificativo num.
  817.  
  818.    INPUTS
  819.     in  = puntatore a struttura ambient3d della scena 3d su cui operare.
  820.           Deve essere maggiore di 0 altrimenti esito indefinito. 
  821.     num = numero intero indicante identificativo oggetto da settare. 
  822.  
  823.    RESULT
  824.     se esi maggiore di 0 allora tutto ok altrimenti settaggio fallito.
  825.  
  826.    BUGS
  827.     nessuno noto, se ne trovate segnalatemeli.
  828.  
  829.    NOTES
  830.  
  831.    SEE ALSO
  832.     GD_getobj
  833.  
  834. graphics3d.library/GD_getobj            graphics3d.library/GD_getobj
  835.    NAME
  836.     GD_getobj  --  ritorna identificativo di un oggetto
  837.  
  838.    SYNOPSIS
  839.     id=GD_getobj(in)
  840.                  A0
  841.     LONG GD_getobj(struct ambient3d *);
  842.  
  843.    FUNCTION
  844.     ritorna l'identificativo dell' oggetto attualmente selezionato.
  845.  
  846.    INPUTS
  847.     in = puntatore a struttura ambient3d della scena 3d su cui operare.
  848.          Deve essere maggiore di 0 altrimenti esito indefinito. 
  849.  
  850.    RESULT
  851.     se maggiore di 0 allora identificativo oggetto, altrimenti nessun
  852.     oggetto attualmente selezionato.
  853.  
  854.    BUGS
  855.     nessuno noto, se ne trovate segnalatemeli.
  856.  
  857.    NOTES
  858.  
  859.    SEE ALSO
  860.     GD_setobj
  861.  
  862. graphics3d.library/GD_paintframe            graphics3d.library/GD_paintframe
  863.    NAME
  864.     GD_paintframe  --  disegna effettivamente tutti i poligoni
  865.     
  866.    SYNOPSIS
  867.     rast=GD_paintframe(in)
  868.                        A0
  869.     struct RastPort *GD_paintframe(struct ambient3d *);
  870.  
  871.    FUNCTION
  872.     disegna effettivamente tutti i poligoni effettivamente visibili nella
  873.     vista corrente ma non li visualizza.
  874.  
  875.    INPUTS
  876.     in = puntatore a struttura ambient3d della scena 3d su cui operare.
  877.          Deve essere maggiore di 0 altrimenti esito indefinito. 
  878.  
  879.    RESULT
  880.     puntatore a RastPort usata per disegnare i poligoni (attualmente non
  881.     visibile), puo' essere utilizzato come riferimento da altre funzioni
  882.     grafiche purche' queste considerino anche i layer (utilizzati per 
  883.     il clipping).
  884.     Inoltre tenete presente che questa rastport ha come 0,0 e larghezza
  885.     e altezza i valori originariamente impostati con GD_display3d e non
  886.     quelli eventualmente modificati con GD_clipbox.
  887.  
  888.    BUGS
  889.     nessuno noto, se ne trovate segnalatemeli.
  890.  
  891.    NOTES
  892.     per eliminare le facce nascoste, prima di disegnare i poligoni si
  893.     riordinano in base alla distanza del punto medio dall'osservatore. 
  894.     Tenete presente pero' che questo algoritmo sbaglia in caso di 
  895.     intersezioni. 
  896.     Se si usa lo Z-buffering il risultato e' perfetto ed e' anche
  897.     leggermente piu' veloce con grossi oggetti.
  898.  
  899.    SEE ALSO
  900.     GD_newview ,GD_switch_rp
  901.  
  902. graphics3d.library/GD_newview            graphics3d.library/GD_newview
  903.    NAME
  904.     GD_newview  --  ricalcola la vista attuale della scena 3d
  905.  
  906.    SYNOPSIS
  907.     GD_newview(in)
  908.                A0
  909.     void GD_newview(struct ambient3d *);
  910.  
  911.    FUNCTION
  912.     ricalcola la lista dei poligoni effettivamente visibili nella vista
  913.     attuale e li proietta sul piano di proiezione.
  914.  
  915.    INPUTS
  916.     in = puntatore a struttura ambient3d della scena 3d su cui operare.
  917.          Deve essere maggiore di 0 altrimenti esito indefinito. 
  918.  
  919.    RESULT
  920.  
  921.    BUGS
  922.     nessuno noto, se ne trovate segnalatemeli.
  923.  
  924.    NOTES
  925.     questa funzione va usata sempre se si vuol vedere effettivamente
  926.     l'effetto delle trasformazioni sugli oggetti.
  927.     Dopo aver invocato questa funzione occorre invocare GD_paintframe()
  928.     per disegnare i poligoni e poi GD_switch_rp() per visualizzarli
  929.     effettivamente.
  930.  
  931.    SEE ALSO
  932.     GD_paintframe ,GD_switch_rp
  933.  
  934. graphics3d.library/GD_switch_rp            graphics3d.library/GD_switch_rp
  935.    NAME
  936.     GD_switch_rp  --  visualizza la vista disegnata con GD_paintframe()
  937.  
  938.    SYNOPSIS
  939.     GD_switch_rp(in)
  940.                  A0
  941.     void GD_switch_rp(struct ambient3d *);
  942.  
  943.    FUNCTION
  944.     visualizza la vista disegnata con GD_paintframe e le eventuali 
  945.     aggiunte fatte successivamente.
  946.  
  947.    INPUTS
  948.     in = puntatore a struttura ambient3d della scena 3d su cui operare.
  949.          Deve essere maggiore di 0 altrimenti esito indefinito. 
  950.  
  951.    RESULT
  952.  
  953.    BUGS
  954.     nessuno noto, se ne trovate segnalatemeli.
  955.  
  956.    NOTES
  957.     Nella versione _CPU della libreria uso la WritePixelArray() per
  958.     visualizzare il chunky buffer nella finestra.
  959.     Nella versione _BLT della libreria 
  960.     per effettuare la visualizzazione si usa la funzione ClipBlit cioe'
  961.     si copia dalla rastport usato da GD_paintframe alla rastport della
  962.     finestra di visualizzazione il box che si intende visualizzare,
  963.     in questo modo si eliminano(quasi) i fastidiosissimi effetti di
  964.     flickering che si avrebbero disgnando direttamente sulla rastport 
  965.     della finestra ed in piu' si semplifica il clipping sul box.
  966.     Ho provato ad usare la funzione BltBitMap al posto di ClipBlit
  967.     visto che sembra piu' veloce, ma almeno sulla mia macchina a volte
  968.     la manda in crash spettacolari.
  969.     Quindi per ora uso ClipBlt , si accettano suggerimenti per risolvere
  970.     il problema.
  971.  
  972.    SEE ALSO
  973.     GD_paintframe ,GD_newview
  974.  
  975. graphics3d.library/GD_translateobject            graphics3d.library/GD_translateobject
  976.    NAME
  977.     GD_translateobject  --  spostamento relativo origine di un oggetto
  978.  
  979.    SYNOPSIS
  980.     GD_translateobject(in ,dx ,dy ,dz)
  981.                        A0  D0  D1  D2
  982.     void GD_translateobject(struct ambient3d *,LONG,LONG,LONG);
  983.     
  984.    FUNCTION
  985.     sposta l'origine dell'oggetto attualmente selezionato in modo 
  986.     relativo rispetto all'origine del propio asse.
  987.  
  988.    INPUTS
  989.     in = puntatore a struttura ambient3d della scena 3d su cui operare.
  990.          Deve essere maggiore di 0 altrimenti esito indefinito. 
  991.     dx = valore spostamento origine oggetto sull'asse X . 
  992.          Valore espresso in fix point (vedi notes di GD_moveforward).
  993.     dy = valore spostamento origine oggetto sull'asse Y . 
  994.          Valore espresso in fix point (vedi notes di GD_moveforward).
  995.     dz = valore spostamento origine oggetto sull'asse Z . 
  996.          Valore espresso in fix point (vedi notes di GD_moveforward).
  997.  
  998.    RESULT
  999.  
  1000.    BUGS
  1001.     nessuno noto, se ne trovate segnalatemeli.
  1002.  
  1003.    NOTES
  1004.     ogni richiamo di questa funzione adesso si comporta come la 
  1005.     GD_scaleobject o la GD_rotateobject , cioe non e' cumulativa. 
  1006.     es: due traslazioni di 2 unita' sull'asse X equivalgono ad una di 2.
  1007.  
  1008.    SEE ALSO
  1009.     GD_positionobject
  1010.  
  1011. graphics3d.library/GD_positionobject            graphics3d.library/GD_positionobject
  1012.    NAME
  1013.     GD_positionobject  --  spostamento assoluto origine di un oggetto 
  1014.  
  1015.    SYNOPSIS
  1016.     GD_positionobject(in ,x ,y ,z )
  1017.                       A0  D0 D1 D2
  1018.     void GD_positionobject(struct ambient3d *,LONG,LONG,LONG);
  1019.  
  1020.    FUNCTION
  1021.     sposta l'origine dell'oggetto attualmente selezionato in modo 
  1022.     assoluto rispetto all'origine della scena 3d.
  1023.     
  1024.    INPUTS
  1025.     in = puntatore a struttura ambient3d della scena 3d su cui operare.
  1026.          Deve essere maggiore di 0 altrimenti esito indefinito. 
  1027.     x  = nuovo valore origine oggetto sull'asse X . 
  1028.          Valore espresso in fix point (vedi notes di GD_moveforward).
  1029.     y  = nuovo valore origine oggetto sull'asse Y . 
  1030.          Valore espresso in fix point (vedi notes di GD_moveforward).
  1031.     z  = nuovo valore origine oggetto sull'asse Z . 
  1032.          Valore espresso in fix point (vedi notes di GD_moveforward).
  1033.  
  1034.    RESULT
  1035.  
  1036.    BUGS
  1037.     nessuno noto, se ne trovate segnalatemeli.
  1038.  
  1039.    NOTES
  1040.     e' SEMPRE applicata dopo tutte le altre.
  1041.  
  1042.    SEE ALSO
  1043.     GD_translateobject
  1044.  
  1045. graphics3d.library/GD_scaleobject            graphics3d.library/GD_scaleobject
  1046.    NAME
  1047.     GD_scaleobject  --  riscala un oggetto 
  1048.  
  1049.    SYNOPSIS
  1050.     GD_scaleobject(in ,xscale_fact,yscale_fact,zscalefact)
  1051.                    A0  D0          D1          D2
  1052.     void GD_scaleobject(struct ambient3d *,LONG,LONG,LONG);    
  1053.  
  1054.    FUNCTION
  1055.     riscala l'oggetto attualmente selezionato lungo gli assi della
  1056.     sua origine ma in modo temporaneo (vale solo per la frame attuale).
  1057.  
  1058.    INPUTS
  1059.     in           = puntatore a struttura ambient3d della scena 3d su 
  1060.         cui operare. Deve essere maggiore di 0 altrimenti esito 
  1061.         indefinito. 
  1062.     xscale_fact  = valore riscalatura oggetto sull'asse X . 
  1063.              Valore espresso in fix point (vedi notes di GD_moveforward).
  1064.     yscale_fact  = valore riscalatura oggetto sull'asse Y . 
  1065.              Valore espresso in fix point (vedi notes di GD_moveforward).
  1066.     zscale_fact  = valore riscalatura oggetto sull'asse Z . 
  1067.              Valore espresso in fix point (vedi notes di GD_moveforward).
  1068.  
  1069.    RESULT
  1070.  
  1071.    BUGS
  1072.     nessuno noto, se ne trovate segnalatemeli.
  1073.  
  1074.    NOTES
  1075.     ogni volta che si usa questa funzione la riscalatura sara' applicata
  1076.     alle originali dimensioni dell'oggetto, quindi se si vuol riscalare
  1077.     l'oggetto in piu' volte occorre che i valori scale_fact siano variati
  1078.     di conseguenza.
  1079.     Es: due riscalature sull'asse X di 2 volte equivalgono ad una di 2
  1080.         volte (e non di 4 come puo' sembrare).
  1081.     Da notare inoltre che lo stesso vale anche per combinazioni di 
  1082.     scalature e rotazioni, ovvero per variazioni graduali contemporanee
  1083.     occorre ogni volta riapplicare entrambe le trasformazioni con i
  1084.     rispettivi valori all'oggetto prima di richiamare la GD_newview.
  1085.  
  1086.    SEE ALSO
  1087.     GD_rotateobject
  1088.  
  1089. graphics3d.library/GD_rotateobject            graphics3d.library/GD_rotateobject
  1090.    NAME
  1091.     GD_rotateobject  --  ruota un oggetto
  1092.  
  1093.    SYNOPSIS
  1094.     GD_rotateobject(in ,angle_x ,angle_y ,angle_z)
  1095.                     A0  D0       D1       D2        
  1096.     void GD_rotateobject(struct ambient3d *,LONG,LONG,LONG);
  1097.  
  1098.    FUNCTION
  1099.     ruota l'oggetto attualmente selezionato rispetto alla sua origine
  1100.     ma in modo temporaneo (vale solo per la frame attuale).
  1101.  
  1102.    INPUTS
  1103.     in      = puntatore a struttura ambient3d della scena 3d su 
  1104.           cui operare. Deve essere maggiore di 0 altrimenti esito 
  1105.           indefinito. 
  1106.     angle_x = valore intero (non fix point) in gradi sessagesimali
  1107.           indicante angolo di rotazione su asse X oggetto. 
  1108.     angle_y = valore intero (non fix point) in gradi sessagesimali
  1109.           indicante angolo di rotazione su asse Y oggetto. 
  1110.     angle_z = valore intero (non fix point) in gradi sessagesimali
  1111.           indicante angolo di rotazione su asse Z oggetto. 
  1112.  
  1113.    RESULT
  1114.  
  1115.    BUGS
  1116.     nessuno noto, se ne trovate segnalatemeli.
  1117.  
  1118.    NOTES
  1119.     anche questa trasformazione si riferisce sempre alla posizione 
  1120.     originale dell'oggetto a cui si applica.
  1121.     Per maggiori chiarimenti vedi NOTES di GD_scaleobject.
  1122.  
  1123.    SEE ALSO
  1124.     GD_scaleobject
  1125.  
  1126. graphics3d.library/GD_clipbox            graphics3d.library/GD_clipbox
  1127.    NAME
  1128.     GD_clipbox  --  varia le dimensioni del box di visualizzazione.
  1129.  
  1130.    SYNOPSIS
  1131.     esi=GD_clipbox(in ,minx ,miny ,dx ,dy )
  1132.                    A0  D0    D1    D2  D3
  1133.     LONG GD_clipbox(struct ambient3d *,LONG,LONG,LONG,LONG)
  1134.  
  1135.    FUNCTION
  1136.     varia le dimensioni del box che delimita l'area di visualizzazione
  1137.     della scena 3d.
  1138.  
  1139.    INPUTS
  1140.     in   = puntatore a struttura ambient3d della scena 3d su cui operare.
  1141.            Deve essere maggiore di 0 altrimenti esito indefinito. 
  1142.     minx = coordinata X angolo superiore sinistro box, rispetto alla
  1143.            finestra di visualizzazione.
  1144.     miny = coordinata Y angolo superiore sinistro box, rispetto alla
  1145.            finestra di visualizzazione.
  1146.     dx   = valore larghezza box deve essere multiplo di 16.
  1147.     dy   = valore altezza box.
  1148.  
  1149.    RESULT
  1150.     se maggiore di 0 allora tutto ok ed indica l'effettivo valore di dx usato, 
  1151.     altrimenti variazione fallita per errore.
  1152.  
  1153.    BUGS
  1154.     nessuno noto, se ne trovate segnalatemeli.
  1155.  
  1156.    NOTES
  1157.     attenzione a non eccedere mai le dimensioni originali del box di
  1158.     visualizzazione definite con la GD_display3d pena probabili blocchi.
  1159.     Questa funzione non fa alcun controllo in proposito.
  1160.  
  1161.    SEE ALSO
  1162.     GD_display3d
  1163.  
  1164. graphics3d.library/GD_over            graphics3d.library/GD_over
  1165.    NAME
  1166.     GD_over  --  cambia il modo di tracciamento nella rastport nascosta
  1167.  
  1168.    SYNOPSIS
  1169.     GD_over(in, mod )
  1170.             A0  D0
  1171.     void GD_over(struct ambient3d *,LONG);
  1172.  
  1173.    FUNCTION
  1174.     cambia il modo video di tracciamento nella rastport usata da
  1175.     GD_paintframe non influenzando pero' questa funzione.
  1176.  
  1177.    INPUTS
  1178.     in  = puntatore a struttura ambient3d della scena 3d su cui operare.
  1179.           Deve essere maggiore di 0 altrimenti esito indefinito. 
  1180.     mod = nuovo modo video tra i seguenti :
  1181.           0 = JAM1 (usare la macro JAM1)
  1182.           1 = JAM2 (usare la macro JAM2)
  1183.           2 = COMPLEMENT (usare la macro COMPLEMENT)
  1184.           4 = INVERSVID (usare la macro INVERSVID)
  1185.  
  1186.    RESULT
  1187.  
  1188.    BUGS
  1189.     nessuno noto, se ne trovate segnalatemeli.
  1190.  
  1191.    NOTES
  1192.  
  1193.    SEE ALSO
  1194.  
  1195. graphics3d.library/GD_cascene            graphics3d.library/GD_cascene
  1196.    NAME
  1197.     GD_cascene -- varia alcuni parametri di visualizzazione della scena 
  1198.               3d
  1199.  
  1200.    SYNOPSIS
  1201.     GD_cascene(in, new )
  1202.                A0  A1
  1203.     LONG GD_cascene(struct ambient3d *,struct tag3d *);
  1204.  
  1205.    FUNCTION
  1206.     Permette di variare alcuni parametri di visualizzazione della scena 
  1207.     3d definita con dislplay3d.
  1208.     
  1209.    INPUTS
  1210.     in  = puntatore a struttura ambient3d della scena 3d su cui operare.
  1211.           Deve essere maggiore di 0 altrimenti esito indefinito. 
  1212.     new = puntatore ad array di strutture tag3d con nuovi parametri,
  1213.           funziona allo stesso modo delle TagList implementate nelle
  1214.           librerie di sistema.
  1215.           Per il momento i valori possibili per .tipo sono:
  1216.           CS_PROJECT - tipo di proiezione da usare valori usabili:
  1217.                PROSP_P=proiezione prospettica (l'attuale).
  1218.                PARAL_P=proiezione parallela (sperimentale).
  1219.           CS_SBUFF   - non implementato ancora.
  1220.           CS_GCOLOR     - n# registro colore sfondo scena 3d (default n#0).
  1221.           CS_VDIST     - nuovo valore (intero non fix) per distanza
  1222.                tra osservatore e piano di proiezione.
  1223.           CS_VIEWP     - inserisce le coordinate attuali della camera nella 
  1224.                struttura vertex puntata dal campo .val dell'elemento 
  1225.                tag3b. 
  1226.           CS_NPX0     - val. intero (non fix) con nuova origine X
  1227.                box nella finestra.
  1228.           CS_NPY0     - val. intero (non fix) con nuova origine Y
  1229.                box nella finestra.
  1230.           CS_ZBUF    - on/off(1/0) z-buffer.    
  1231.           CS_ZOOM      - val. in fixpoint fissa il livello di zoom della scena
  1232.                    (max: 256 min: 1/256).
  1233.     
  1234.    RESULT
  1235.     se uguale a 0 nessuna variazione effettuata, se >0 allora indica 
  1236.     numero di variazioni effettuate.
  1237.     
  1238.    BUGS
  1239.     nessuno noto, se ne trovate segnalatemeli.
  1240.  
  1241.    NOTES
  1242.     Trattare l'array di strutture tag3d esattamente come gli
  1243.     array di strutture TagItem dette anche tag list implementate
  1244.     nel sistema operativo amiga dal 2.0 in poi.
  1245.     L'ultima struttura dell'array deve essere vuota e deve avere
  1246.     come primo elemento la costante END_T.
  1247.     NON USARE MAI NEL PRIMO VALORE DIRETTAMENTE I NUMERI MA USATE
  1248.     SEMPRE LE LABEL CHE LI INDICANO. 
  1249.     Per abilitare lo Z-Buffer si deve avere almeno maxXbox*maxYbox*4
  1250.     bytes di memoria liberi altrimenti non si abilita.
  1251.     Attenzione Se si abilita e poi disabilita la memoria usata non 
  1252.     e' subito rilasciata ma verra liberata' solo alla chiusura della
  1253.     scena (GD_close_display3d).
  1254.  
  1255.    SEE ALSO
  1256.  
  1257. graphics3d.library/GD_fix2int            graphics3d.library/GD_fix2int
  1258.    NAME
  1259.     GD_fix2int -- converte un numero fix point in un intero.
  1260.  
  1261.    SYNOPSIS
  1262.     GD_fix2int(in,out)
  1263.                A0  A1
  1264.     LONG GD_fix2int(LONG *,LONG *)
  1265.  
  1266.    FUNCTION
  1267.     converte un numero fix point nel formato della libreria in un intero
  1268.     a 32bit approssimando all'intero piu' vicino.
  1269.  
  1270.    INPUTS
  1271.     in  = puntatore ad intero a 32 bit con valore fix point da 
  1272.           convertire.
  1273.     out = puntatore ad intero a 32 bit dove mettere risultato.
  1274.  
  1275.    RESULT
  1276.     se uguale a 0 tutto ok se diverso da 0 errore e out non modificato.    
  1277.    BUGS
  1278.     nessuno noto, se ne trovate segnalatemeli.
  1279.  
  1280.    NOTES
  1281.  
  1282.    SEE ALSO
  1283.     GD_fix2sfl,GD_fix2dfl
  1284.  
  1285. graphics3d.library/GD_fix2sfl            graphics3d.library/GD_fix2sfl
  1286.    NAME
  1287.     GD_fix2sfl -- converte un numero fix point in un single float.
  1288.  
  1289.    SYNOPSIS
  1290.     GD_fix2sfl(in,out)
  1291.                A0  A1
  1292.     LONG GD_fix2sfl(LONG *,float *)
  1293.  
  1294.    FUNCTION
  1295.     converte un numero fix point nel formato della libreria in un float
  1296.     in singola precisione.
  1297.  
  1298.    INPUTS
  1299.     in  = puntatore ad intero a 32 bit con valore fix point da 
  1300.           convertire.
  1301.     out = puntatore a numero single float dove mettere risultato.
  1302.  
  1303.    RESULT
  1304.     se uguale a 0 tutto ok se diverso da 0 errore e out non modificato.    
  1305.    BUGS
  1306.     nessuno noto, se ne trovate segnalatemeli.
  1307.  
  1308.    NOTES
  1309.  
  1310.    SEE ALSO
  1311.     GD_fix2int,GD_fix2dfl
  1312.  
  1313. graphics3d.library/GD_fix2dfl            graphics3d.library/GD_fix2dfl
  1314.    NAME
  1315.     GD_fix2dfl -- converte un numero fix point in un double float. 
  1316.  
  1317.    SYNOPSIS
  1318.     GD_fix2dfl(in,out)
  1319.                A0  A1
  1320.     LONG GD_fix2dfl(LONG *,double *)
  1321.  
  1322.    FUNCTION
  1323.     converte un numero fix point nel formato della libreria in un float
  1324.     in doppia precisione.
  1325.  
  1326.    INPUTS
  1327.     in  = puntatore ad intero a 32 bit con valore fix point da 
  1328.           convertire.
  1329.     out = puntatore a numero double float dove mettere risultato.
  1330.  
  1331.    RESULT
  1332.     se uguale a 0 tutto ok se diverso da 0 errore e out non modificato.    
  1333.    BUGS
  1334.     nessuno noto, se ne trovate segnalatemeli.
  1335.  
  1336.    NOTES
  1337.  
  1338.    SEE ALSO
  1339.     GD_fix2sfl,GD_fix2int
  1340.  
  1341. graphics3d.library/GD_int2fix            graphics3d.library/GD_int2fix
  1342.    NAME
  1343.     GD_int2fix -- converte un intero in un numero in fix point.    
  1344.  
  1345.    SYNOPSIS
  1346.     GD_int2fix(in ,out)
  1347.            A0  A1
  1348.     LONG GD_int2fix(LONG *,LONG *);
  1349.  
  1350.    FUNCTION
  1351.     converte un intero a 32bit in un numero fix point nel formato
  1352.     richiesto dalla libreria.
  1353.  
  1354.    INPUTS
  1355.     in  = puntatore a intero a 32 bit da convertire.
  1356.     out = puntatore a intero a 32 bit dove mettere numero in fix point
  1357.           calcolato.
  1358.  
  1359.    RESULT
  1360.     se uguale a 0 tutto ok se diverso da 0 errore e out non modificato.    
  1361.    BUGS
  1362.     nessuno noto, se ne trovate segnalatemeli.
  1363.  
  1364.    NOTES
  1365.  
  1366.    SEE ALSO
  1367.     GD_sfl2fix,GD_dfl2fix
  1368.  
  1369. graphics3d.library/GD_sfl2fix            graphics3d.library/GD_sfl2fix
  1370.    NAME
  1371.     GD_sfl2fix -- converte un single float in un numero in fix point.    
  1372.    SYNOPSIS
  1373.     GD_sfl2fix(in ,out)
  1374.            A0  A1
  1375.     LONG GD_sfl2fix(float *,LONG *);
  1376.  
  1377.    FUNCTION
  1378.     converte un numero float in singola precisione in un numero fix 
  1379.     point nel formato richiesto dalla libreria.
  1380.  
  1381.    INPUTS
  1382.     in  = puntatore a numero float da convertire.
  1383.     out = puntatore a intero a 32 bit dove mettere numero in fix point
  1384.           calcolato.
  1385.  
  1386.    RESULT
  1387.     se uguale a 0 tutto ok se diverso da 0 errore e out non modificato.    
  1388.    BUGS
  1389.     nessuno noto, se ne trovate segnalatemeli.
  1390.  
  1391.    NOTES
  1392.  
  1393.    SEE ALSO
  1394.     GD_int2fix,GD_dfl2fix
  1395.  
  1396. graphics3d.library/GD_dfl2fix            graphics3d.library/GD_dfl2fix
  1397.    NAME
  1398.     GD_dfl2fix -- converte un double float in un numero in fix point.    
  1399.  
  1400.    SYNOPSIS
  1401.     GD_dfl2fix(in ,out)
  1402.            A0  A1
  1403.     LONG GD_dfl2fix(double *,LONG *);
  1404.  
  1405.    FUNCTION
  1406.     converte un numero float in doppia precisione in un numero fix 
  1407.     point nel formato richiesto dalla libreria.
  1408.  
  1409.    INPUTS
  1410.     in  = puntatore a numero double float da convertire. 
  1411.     out = puntatore a intero a 32 bit dove mettere numero in fix point
  1412.           calcolato.
  1413.  
  1414.    RESULT
  1415.     se uguale a 0 tutto ok se diverso da 0 errore e out non modificato.    
  1416.    BUGS
  1417.     nessuno noto, se ne trovate segnalatemeli.
  1418.  
  1419.    NOTES
  1420.  
  1421.    SEE ALSO
  1422.     GD_sfl2fix,GD_int2fix
  1423.  
  1424. graphics3d.library/GD_loadobject            graphics3d.library/GD_loadobject
  1425.  
  1426. NAME
  1427.     GD_loadobject -- Carica un oggetto con il formato propietario .3dgfo . 
  1428.  
  1429. SYNOPSIS 
  1430.     id=GD_loadobject(in,name,scale)
  1431.                  A0 A1   D0
  1432.     LONG GD_dfl2fix(struct ambient3d *,char *,LONG)
  1433.  
  1434. FUNCTION
  1435.     Carica un file con la descrizione di un oggetto 3d, il formato
  1436.     e' propietario vedi le note per una rapida spiegazione.
  1437. INPUT
  1438.     in   = puntatore a struttura ambient3d della scena 3d su cui operare.
  1439.            Deve essere maggiore di 0 altrimenti esito indefinito. 
  1440.     name = puntatore a stringa con nome del file da caricare (path completo) 
  1441.     scale= valore in FIXPOINT con il fattore di scala da applicare all'oggetto.
  1442.  
  1443. RESULT
  1444.     Se uguale a 0 operazione fallita oggetto non caricato.
  1445.     Se diverso da 0 allora e' l'identificativo del nuovo oggetto creato come
  1446.     in GD_newobj.
  1447.  
  1448. BUGS
  1449.     Nessuno noto, se ne trovate segnalatemeli.
  1450.  
  1451. NOTES
  1452.     Questa e' una spiegazione del mio formato propietario per oggetti 3d , .3dgfo:
  1453.      Testata :
  1454.        [3][D][G][F][X][V][x][.][x][x][00][nome_oggetto][00]
  1455.       numero totale vertici (4 bytes :long int)
  1456.       numero totale poligoni (4 bytes :long int)
  1457.     Coordinate vertici :
  1458.      X coordinata (8 bytes :formato Ieee double float )
  1459.      Y coordinata (8 bytes :formato Ieee double float )
  1460.      Z coordinata (8 bytes :formato Ieee double float )
  1461.      Nota : Una tripletta per ogni vertice.
  1462.     Descrittori poligoni :
  1463.      flag+colour del poligono (4 bytes)
  1464.      numero vertici del poligono (1 byte :valori permessi 1,2,3,4)
  1465.      #1 indice vertice (4 bytes :long int ,primo=0 ultimo=numero_vertice-1)
  1466.      #2 indice vertice (4 bytes :long int ,primo=0 ultimo=numero_vertice-1)
  1467.      #3 indice vertice (4 bytes :long int ,primo=0 ultimo=numero_vertice-1)
  1468.      #4 indice vertice (4 bytes :long int ,primo=0 ultimo=numero_vertice-1)
  1469.      Nota : l'indice vertice #2,#3,#4 e' presente solo se il numero dei vertici
  1470.         del poligono e' di rispettivamente 2,3 o 4.
  1471.      Descrizione di flag+colour :
  1472.          flag (1 byte)
  1473.          bit 0 = 0 
  1474.             colour[0] e' la componente Rossa (1 byte: 0-255)
  1475.              colour[1] e' la componente Verde (1 byte: 0-255)
  1476.             colour[3] e' la componente Blu     (1 byte: 0-255)
  1477.         bit 0 = 1
  1478.             colour[0] ignorato
  1479.              colour[1] ignorato
  1480.             colour[3] registro colore nella palette virtuale
  1481.                     (1 byte: 0-255)
  1482.              Nota : per ora e' supportato solo bit 0=1 
  1483.          bit 1 = 1 poligono a 2 facce.
  1484.          bit 1 = 0 poligono ad 1 faccia
  1485.          bit 2-7 = riservati per usi futuri
  1486.  
  1487. SEE ALSO
  1488.  
  1489. graphics3d.library/GD_genpalette            graphics3d.library/GD_genpalette
  1490.  
  1491. NAME
  1492.     GD_genpalette -- genera la palette dei colori virtuali per la scena 3D
  1493.  
  1494. SYNOPSIS 
  1495.     esi=GD_genpalette(in,new)
  1496.               A0 A1
  1497.     LONG GD_genpalette(struct ambient3d *,struct tag3d *)
  1498.     
  1499. FUNCTION
  1500.     Genera la palette dei colori virtuale ovvero il numero assegnato ad ogni
  1501.     colore non e' detto corrisponda al registro colore della palette inoltre
  1502.     implementa anche il colore trasparente.
  1503.     La GD_touchpalette() ora richiama questa funzione.
  1504.  
  1505. INPUT
  1506.     in   = puntatore a struttura ambient3d della scena 3d su cui operare.
  1507.            Deve essere maggiore di 0 altrimenti esito indefinito. 
  1508.     new  = puntatore ad array di strutture tag3d con nuovi parametri,
  1509.            funziona allo stesso modo delle TagList implementate nelle
  1510.            librerie di sistema.
  1511.            Per il momento i valori possibili per .tipo sono:
  1512.         GP_RCOL - riserva il n# di colori indicato nella palette da generare
  1513.               cioe' non modifichera quei colori a partire dal reg #0.
  1514.               Utile per non modificare i colori del sistema (Def. #4).
  1515.         GP_NCOL - definisce il n# base di colori virtuali da usare (Def. #1)
  1516.               Non puo' superare il n# di colori ammesso per lo schermo usato
  1517.               salvo per l'uso del colore trasparente.
  1518.         GP_NLIV - definisce il n# di livelli di luminosita' ammessi per ogni
  1519.               colore virtuale, eccetto che per il trasparente (def. si
  1520.               adatta automaticamente al massimo permesso su quello schermo).
  1521.               Il prodotto GP_NLIV*GP_NCOL+GP_RCOL <= N#_MAX._COLORI_SCHERMO.
  1522.               Altrimenti questo valore sara' variato dalla funzione in modo
  1523.               da soddisfare sempre questa funzione.
  1524.               Si puo' sfruttare questa caratteristica per rendere la def.
  1525.               dei colori e della scena indipendente dal n# di colori dello
  1526.               schermo scelto.
  1527.         GP_TRASP- se .val=1 attiva il colore trasparente se .val=0 lo disattiva
  1528.               (Def. disattivato) questo sara' sempre l'ultimo dei colori 
  1529.               virtuali e non verra' usato per il controllo del massimo n# di 
  1530.               livelli di luminosita' ammissibili.
  1531.         GP_COL  - fissa il n# di colore virtuale su cui agiranno le prossime 
  1532.               operazioni.(def. #0) Non puo' superare ovviamente il valore 
  1533.               indicato in GP_NCOL e inizia da 0 .
  1534.               Questa operazione puo' essere ripetuta piu' volte, in questo
  1535.               modo si potranno modificare piu' colori virtuali in una volta 
  1536.               sola.
  1537.         GP_HRGB - fissa il massimo livello di luminosita' per il colore virtuale
  1538.               scelto, .val deve puntare ad una struttura rgbtype con tale 
  1539.               valore.  (Def ->red=15,->green=15,->blue=15).
  1540.               Attenzione se i valori saranno compresi nel range tra 0-15 si
  1541.               potra' usare anche il S.O. >=2.0 altrimenti se compresi tra 
  1542.               0-255 occorrera' per forza il S.O >= 3.0
  1543.         GP_LRGB - fissa il minimo livello di luminosita' per il colore virtuale 
  1544.               scelto.  (Def ->red=0,->green=0,->blue=0).
  1545.               Per il resto e' identica in tutto a GP_HRGB.
  1546.         GP_INFO - Restituisce nell'intero puntato da .val il n# di registro 
  1547.               reale della palette a cui corrisponde il registro virtuale 
  1548.               scelto.Questo tra l'altro coincide con il valore di minore 
  1549.               intensita' luminosa.
  1550.         GP_PALET- in .val e' indicato il n# di registro reale della palette a cui 
  1551.               far corrispondere il colore virtuale scelto.
  1552.               ATTENZIONE questo verra' considerato' come valore con minor 
  1553.               intensita' luminosa per quel colore e i successivi GP_NLIV 
  1554.               registri saranno' i valori d'intensita' luminosa crescente. 
  1555.               Funzione utile se si vuol predefinire la palette prima di 
  1556.               usare questa funzione.   
  1557.  
  1558. RESULT
  1559.     Numero di operazioni eseguite con successo.
  1560.  
  1561. BUGS
  1562.     Nessuno noto, se ne trovate segnalatemeli.
  1563.  
  1564. NOTES
  1565.     L'uso accorto di questa funzione permette di evitare di dover ricalcolare la 
  1566.     palette e cambiare il colore degli oggetti se si cambia il n# massimo di colori 
  1567.     dello schermo.
  1568.     Inoltre dovrebbe rendere quasi indolore il passaggio eventuale (nelle prossime
  1569.     versioni) a schermi true color.
  1570.     
  1571. SEE ALSO
  1572. GD_touchpalette
  1573.  
  1574. graphics3d.library/GD_modpoly            graphics3d.library/GD_modpoly
  1575.  
  1576. NAME
  1577.     GD_modpoly -- modifica alcune caratteristiche dei poligoni dell'oggetto 
  1578.               attuale
  1579.  
  1580. SYNOPSIS 
  1581.     esi=GD_modpoly(in,new)
  1582.                A0 A1
  1583.     LONG GD_modpoly(struct ambient3d *,struct tag3d *)
  1584.  
  1585. FUNCTION
  1586.     Permette la modifica di alcuni parametri dei poligoni dell'oggetto attuale
  1587.     tra questi permette il posizionamento di una texture map sul poligono.
  1588.  
  1589. INPUT
  1590.     in   = puntatore a struttura ambient3d della scena 3d su cui operare.
  1591.            Deve essere maggiore di 0 altrimenti esito indefinito. 
  1592.     new  = puntatore ad array di strutture tag3d con nuovi parametri,
  1593.            funziona allo stesso modo delle TagList implementate nelle
  1594.            librerie di sistema.
  1595.            Per il momento i valori possibili per .tipo sono:
  1596.         MP_POLY - seleziona il n# del poligono su cui agiranno le
  1597.               successive operazioni (Def. #0)
  1598.               Questa operazione puo' essere ripetuta piu' volte cosi'
  1599.                   da poter modificare piu' poligoni in una sola volta.
  1600.         MP_ACTIV- attiva (1 su .val) o disattiva (0 su .val) il poligono
  1601.               scelto (def. attivo).
  1602.         MP_COLOR- nuovo colore (tra quelli virtuali) per il poligono
  1603.               scelto.
  1604.         MP_2SIDE- setta a due(1 su .val) o ad una(0 su .val) faccia il
  1605.               poligono scelto.
  1606.         MP_TMAP - assegna la texture map indicata al poligono scelto.
  1607.               In val occorre riportare il valore restituito dalle
  1608.               funzioni GD_newtmap() o GD_newtmapf() .(Def #0 nessuna
  1609.               texture map assegnata).
  1610.         MP_VTMAP- posiziona l'eventuale texture map assegnata sul poligono
  1611.               scelto.
  1612.               .val deve puntare ad una struttura vtmap dovre dovranno
  1613.               essere definiti i vertici in pixel nella texture map
  1614.               per ogni rispettivo vertice del poligono .
  1615.               Quindi si puo' fare in modo che sul poligono sia visualizzata
  1616.               anche solo una porzione della texture e orientata come si vuole.
  1617.         MP_VTAUTO-Posiziona automaticamente la texture sul poligono in modo che
  1618.               l'angolo in alto a sinistra della texure coincida col primo
  1619.               vertice del poligono e il resto della texture sia interamente
  1620.               visualizzato nel poligono. 
  1621.               ATTENZIONE impostare .val sempre a 0 poiche' in future versioni
  1622.               potra' assumere qualche significato.
  1623.         
  1624. RESULT
  1625.     Numero di operazioni eseguite con successo.
  1626.  
  1627. BUGS
  1628.     Nessuno noto, se ne trovate segnalatemeli.
  1629.  
  1630. NOTES
  1631.     Ricordarsi che se si vuol attivare il texture mapping oltre a definire quale
  1632.     texture map applicare e come occorre anche attivare il texture map sull'oggetto
  1633.     di cui fa parte quel poligono, usare la GD_modobj() per fare questo.
  1634.  
  1635. SEE ALSO
  1636.  
  1637. graphics3d.library/GD_newtmap            graphics3d.library/GD_newtmap
  1638.  
  1639. NAME
  1640.     GD_newtmap -- crea una texture map usabile poi da qualunque oggetto
  1641.     
  1642. SYNOPSIS 
  1643.     map=GD_newtmap(in,dx,dy,buf)
  1644.                A0 D0 D1 A1
  1645.     LONG GD_newtmap(struct ambient3d *,short int,short int,unsigned char *)
  1646.     
  1647. FUNCTION
  1648.     Carica e prepara una texture map per poter essere successivamente piazzata 
  1649.     su uno o piu' poligoni a partire da un buffer chunky che ne descrive l'immagine.
  1650.     
  1651. INPUT
  1652.     in   = puntatore a struttura ambient3d della scena 3d su cui operare.
  1653.            Deve essere maggiore di 0 altrimenti esito indefinito. 
  1654.  
  1655.     dx   = valore larghezza texture map espresso in pixel.
  1656.     dy   = valore altezza texture map espresso in pixel.
  1657.     buf  = puntatore a array di unsigned char con descrizione immagine dx*dy
  1658.            della texture map in formato chunky buffer.
  1659.            I colori li indicati coincideranno con i colori virtuali definiti 
  1660.            con la GD_genpalette() o GD_touchpalette().Ovviamente se alcuni
  1661.            pixel saranno indicati del colore trasparente(sempre se attivo)
  1662.            allora l'immagine risultante sara' bucata in quei punti.
  1663.  
  1664. RESULT
  1665.     Se 0 operazione fallita , se diversa da 0 identificativo di quella texture
  1666.     da indicare tutte le volte che la si vuol applicare su qualche poligono.
  1667.     Non esistono limiti sul numero di volte che una texture puo' essere applicata
  1668.     e questa sara' memorizzata sempre e soltanto 1 volta.
  1669.     Non c'e alcuna differenza di velocita' se si applica una texture di 2x2 pixel
  1670.     di lato o di 1000x1000 pixel (varia ovviamente solo l'occupazione di memoria)
  1671.     quindi basatevi solo sulla qualita' di visualizzazzione finale.    
  1672.  
  1673. BUGS
  1674.     Nessuno noto, se ne trovate segnalatemeli.
  1675.  
  1676. NOTES
  1677.  
  1678. SEE ALSO
  1679. GD_newtmapf,GD_rmtmap,GD_modpoly
  1680.  
  1681. graphics3d.library/GD_rmtmap            graphics3d.library/GD_rmtmap
  1682.  
  1683. NAME
  1684.     GD_rmtmap -- elimina una texture map precedentemente creata
  1685.  
  1686. SYNOPSIS 
  1687.     GD_rmtmap(in,map)
  1688.           A0 A1
  1689.     GD_rmtmap(struct ambient3d *,long int *)
  1690.  
  1691. FUNCTION
  1692.     Elimina una texture map precedentemente preparata con GD_newtmap() o
  1693.     GD_newtmapf().
  1694.  
  1695. INPUT
  1696.     in   = puntatore a struttura ambient3d della scena 3d su cui operare.
  1697.            Deve essere maggiore di 0 altrimenti esito indefinito. 
  1698.     map  = valore restituito da GD_newtmap() o GD_newtmapf() ,se =0 non
  1699.            fara' nulla.
  1700.  
  1701. RESULT
  1702.     Nessuno.
  1703.  
  1704. BUGS
  1705.     Nessuno noto, se ne trovate segnalatemeli.
  1706.  
  1707. NOTES
  1708.  
  1709. SEE ALSO
  1710. GD_newtmap,GD_newtmapf
  1711.  
  1712. graphics3d.library/GD_newtmapf            graphics3d.library/GD_newtmapf
  1713.  
  1714. NAME
  1715.     GD_newtmapf -- crea una texture map leggendola da un file iff-ilbm
  1716.  
  1717. SYNOPSIS 
  1718.     map=GD_newtmapf(in,name)
  1719.             A0 A1
  1720.     LONG GD_newtmapf(struct ambient3d *,unsigned char *)
  1721.  
  1722. FUNCTION
  1723.     Funzionalmente identica alla GD_newtmap() pero' legge i dati dal file in
  1724.     formato IFF-ILBM indicato.
  1725.  
  1726. INPUT
  1727.     in   = puntatore a struttura ambient3d della scena 3d su cui operare.
  1728.            Deve essere maggiore di 0 altrimenti esito indefinito. 
  1729.     name = puntatore a stringa di caratteri con nome e path completo del
  1730.            file in formato IFF-ILBM in cui e' descritta la texture map.
  1731.            Le dimensioni dx e dy saranno estratte dal medesimo file.
  1732.            Non saranno lette correttamente immagini HAM ,HALF-BRITE o
  1733.            TRUE COLOR.
  1734.            Per i colori valgono le stesse indicazioni della GD_newtmap().
  1735.  
  1736. RESULT
  1737.     Vedi GD_newtmap().
  1738.  
  1739. BUGS
  1740.     Nessuno noto, se ne trovate segnalatemeli.
  1741.  
  1742. NOTES
  1743.     Vedi GD_newtmap().
  1744.     
  1745. SEE ALSO
  1746. GD_newtmap,GD_rmtmap,GD_modpoly
  1747.  
  1748. graphics3d.library/GD_colldetect            graphics3d.library/GD_colldetect
  1749.  
  1750. NAME
  1751.     GD_colldetect -- rileva le collisioni fra oggetti
  1752.  
  1753. SYNOPSIS 
  1754.     ris=GD_colldetect(in,n, buf)
  1755.               A0 D0 A1
  1756.     LONG GD_colldetect(struct ambient3d *,long int,long int *)
  1757.  
  1758. FUNCTION
  1759.     Permette la rilevazione di eventuali collisione dell'oggetto attuale con
  1760.     gli altri ed ovviamente indica con chi in caso positivo.
  1761.  
  1762. INPUT
  1763.     in   = puntatore a struttura ambient3d della scena 3d su cui operare.
  1764.            Deve essere maggiore di 0 altrimenti esito indefinito. 
  1765.     n    = numero massimo di collisioni registrabili.
  1766.     buf  = array di long int con almeno 'n' elementi (non si verifica quindi
  1767.            attenzione) dove verranno messi gli identificativi degli 
  1768.            oggetti con cui l'attuale collide.
  1769.            Se si rileva un numero di collisioni maggiore di n l'array 
  1770.            sara' completamente riempito gli altri andranno persi.
  1771.            Se si rileva un numero minore solo i primi elementi dell'array
  1772.            saranno riempiti.
  1773.  
  1774. RESULT
  1775.     Se 0 nessuna collisione rilevata altrimenti e' il numero di TUTTE le 
  1776.     collisioni effettivamente rilevate.
  1777.     
  1778. BUGS
  1779.     Nessuno noto, se ne trovate segnalatemeli.
  1780.  
  1781. NOTES
  1782.     Per il rilevamento delle collisioni viene considerato solo il bounding
  1783.     box dell'oggetto (aggiornato ad ogni trasformazione) quindi puo' essere
  1784.     un po' impreciso, ad esempio se si ha un toroide e si inserisce qualunque
  1785.     altro oggetto nel foro centrale si rilevera' una collisione anche se
  1786.     non e' realmente cosi'.
  1787.     
  1788. SEE ALSO
  1789.  
  1790. graphics3d.library/GD_modobj            graphics3d.library/GD_modobj
  1791.  
  1792. NAME
  1793.     GD_modobj -- modifica alcune caratteristiche dell'oggetto attuale
  1794.  
  1795. SYNOPSIS 
  1796.     esi=GD_modobj(in,new)
  1797.               A0 A1
  1798.     LONG GD_modobj(struct ambient3d *,struct tag3d *)
  1799.     
  1800. FUNCTION
  1801.     Permette la modifica di alcuni parametri dell'oggetto attuale, per
  1802.     ora lo stato e il modo di visualizzazione.
  1803.  
  1804. INPUT
  1805.     in   = puntatore a struttura ambient3d della scena 3d su cui operare.
  1806.            Deve essere maggiore di 0 altrimenti esito indefinito. 
  1807.     new  = puntatore ad array di strutture tag3d con nuovi parametri,
  1808.            funziona allo stesso modo delle TagList implementate nelle
  1809.            librerie di sistema.
  1810.            Per il momento i valori possibili per .tipo sono:
  1811.         MO_STATE - attiva (.val=1) o disattiva (.val=0) l'oggetto attuale
  1812.                (def. attivo).
  1813.                Se si disattiva questo sara' ancora esistente ma non 
  1814.                sara' piu' considerato nell'aggiornamento e visualizzazione
  1815.                della scena, se l'oggetto e' grosso si otterra' una discreta
  1816.                accellerazione nella visualizzazione e nei calcoli.
  1817.         MO_VMODE - cambia il modo di visualizzazione di un oggetto valori
  1818.                accettati:
  1819.                 WIREF         -> wireframe
  1820.                 SOLID         -> solido
  1821.                 SOLID+TMAP    -> solido con texture map
  1822.                 FLAT        -> flat shading
  1823.                 FLAT+TMAP    -> texture map con flat shading
  1824.                 GORAUD        -> goraud shading
  1825.                 GORAUD+TMAP    -> texture map con goraud shading
  1826.     
  1827. RESULT
  1828.     Numero di operazioni eseguite con successo.
  1829.  
  1830. BUGS
  1831.     Nessuno noto, se ne trovate segnalatemeli.
  1832.  
  1833. NOTES
  1834.     Per il modo di visualizzazione occorre tener presente che solo la versione per
  1835.     CPU ( _CPU ) implementa il goraud shading e tutte le combinazioni con la
  1836.     texture mapping, le altre versioni accettano quei parametri ma li ignorano.
  1837.  
  1838. SEE ALSO
  1839.  
  1840.